DMGetDisplayIDByGDevice()
to get the monitor ID
as displayed in the Monitors & Sound Control Panel when a user presses the
'Identify Monitors' button. Unfortunately, DMGetDisplayIDByGDevice()
does not seem to return
this value. How do I get the actual monitor ID number?
Displays.h
that is not described in the Display Manager
documentation that you should use. Essentially, what you want to do is use DMGetDisplayIDByGDevice
to get the displayID
, and then use the DMGetNameByAVID
with that displayID
to get the "name" of the device. The "name" is a string containing the device name (e.g. Multiple Scan Display)
and the device number (e.g. 1). The device number is the number that appears in the Monitors & Sound
Control Panel. To obtain just the device number, or monitor ID, use masks to retrieve just that
section of the name. For example:
err = DMGetDisplayIDByGDevice(gd, &displayID, false); err = DMGetNameByAVID(displayID, kSuppressNameMask + kForceNumberMask, &theStr);
Keep in mind, these calls work with Display Manager 2.0. To use these calls on systems with Display Manager 1.0, you need to ensure that you user has the Display Enabler installed. The Display Enabler is included with the Display Manager SDK. You will find the Display Manager SDK here or on the MacOS SDK CD.
More specifics on the call DMGetNameByAVID
To determine the "name" and/or device number of the requested device, use the
DMGetNameByAVID
function.
extern pascal OSErr DMGetNameByAVID (AVIDType theID, unsigned long nameFlags, Str255 *name)
|
AVIDType is an ID for ports and devices. The old Display ID type is carried on for compatibility . Basically, theID is the displayID for the video device whose GDevice record you wish to obtain. |
|
enum { /* bits for nameFlags */ kSuppressNumberBit = 0, kSuppressNumberMask = 1, kForceNumberBit = 1, kForceNumberMask = 2, kSuppressNameBit = 2, kSuppressNameMask = 4 }; |
*name | *name is a string containing the device name, i.e., Multiple Scan Display and device number, the order for which the device appears in the device tree. |
To obtain a section of the "name," use the nameFlags
parameter.
To obtain just the name, i.e. Multiple Scan Display, use the flag kSuppressNumberMask
in the nameFlags
parameter.
err = DMGetNameByAVID(displayID, kSuppressNumberMask, &nameStr);
To obtain just the number, use the
kSuppressNameMask
+ kForceNumberMask
masks.
err = DMGetNameByAVID(displayID, kSuppressNameMask + kForceNumberMask, &numberStr);
To obtain both
in the same string, use
the kForceNumberMask
flag.
err = DMGetNameByAVID(displayID, kForceNumberMask, &nameStr);